//引用express框架
const express = require('express');
const bp = require('body-parser')
const path = require('path');
const template = require('art-template');
const dataformat = require('dataformat');
const morgan = require('morgan');
const config = require('config');
// 导入express-session
const session = require('express-session');


//创建网站服务器
const app = express();
//监听端口
app.listen(80);
console.log('网站服务器启动成功');
// 数据库连接
require('./model/connect.js');
require('./model/user.js');


//设置跨域访问
app.all("*", function (req, res, next) {
    //设置允许跨域的域名，*代表允许任意域名跨域
    res.header("Access-Control-Allow-Origin", req.headers.origin || '*');
    // //允许的header类型
    res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
    // //跨域允许的请求方式 
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    // 可以带cookies
    res.header("Access-Control-Allow-Credentials", true);
    if (req.method == 'OPTIONS') {
        res.sendStatus(200);
    } else {
        next();
    }
});

// 获取系统环境变量 返回值是对象

// if (process.env.NODE_ENV == 'development') {
//     console.log('当前是开发环境');
//     // 在开发环境中，将客户端发送到服务器器端的请求信息打印到控制台中
//     // app.use(morgan('dev'));
// } else {
//     console.log('当前是生产环境');
// }

// post
app.use(bp.urlencoded({ extended: false }));
// 配置session
app.use(session({ secret: 'secret key' }));
//开放静态资源 
app.use(express.static(path.join(__dirname, 'public')));

// 模板引擎导入外部变量
template.defaults.imports.dataformat = dataformat;
//告诉express使用什么模板引擎,第一个参数后缀，第二个使用的模板引擎
app.engine('html',require('express-art-template'));
//模板文件存放位置,第一个参数固定的，第二个是文件夹路径
app.set('views', path.join(__dirname, 'views'));
//默认后缀
app.set('view engine', 'html')

// 拦截请求，判断是否登录
app.use('/admin', require('./middleware/loginGuard'));

// 引入路由模块
const home = require('./route/home.js');
const admin = require('./route/admin.js');

// 为路由匹配请求路径
app.use('/home', home);
app.use('/admin', admin);





// 错误处理中间件
app.use((err, req, res, next) => {
    // 将字符串转换为对象类型
    const result = JSON.parse(err);
    let params = [];
    for (let attr in result) {
        if (attr != 'path') {
            
            params.push(attr + '=' + result[attr]);
        }
    }
    res.redirect(`${result.path}?${params.join('&')}`);
});

